#include "infrared.h"

uchar ircnt=0;
uchar irflag=0;
uchar bitnum=0;
uchar irdat[25];
uchar irrecok=0;

void Init_infr()
{
//	TMOD=0x;//timer0 mode2  init at uart.c
	TH0=0x00;
	TL0=0x00;
//	EA=1;//All Interrupt    init at uart.c
	ET0=1;//tiemr0 Interrupt
 	EX0=1;//P3^2 Infrared Interrupt
	IT0=1;//falling trigger
	TR0=1;//timer0
}

uchar irdecode()
{
	uchar i;
	uchar value;
	uchar k=17;
	if(irrecok==1)
	{
		irrecok=0;
		for(i=0;i<8;i++)
		{
			value<<=1;
			if(irdat[k]>6)
			{
				value|=0x01;
			}
			k++;
		}
		return value;
	}
}

void timer0() interrupt 1
{
	ircnt++;
}

void exint0() interrupt 0
{
	if(irflag)
	{
		if(ircnt>45)	bitnum=0;
		irdat[bitnum]=ircnt;
		ircnt=0;
		bitnum++;
		if(bitnum==30)	irrecok=1;
	}
	else
	{
		irflag=1;
		ircnt=0;
	}
}
